package com.ruoyi.safe.mapper;

import com.github.pagehelper.Page;
import com.ruoyi.safe.domain.BizProjectCheckRecord;
import com.ruoyi.safe.domain.dto.BizProjectCheckRecordSearchDTO;
import com.ruoyi.safe.domain.dto.StatisticsDto;
import com.ruoyi.safe.domain.vo.BizProjectCheckRecordVO2;
import com.ruoyi.safe.domain.vo.ListRequestVo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 项目自检-检查记录Mapper接口
 *
 * @author ruoyi
 * @date 2023-11-20
 */
@Mapper
public interface BizProjectCheckRecordMapper
{
    /**
     * 查询项目自检-检查记录
     *
     * @param id 项目自检-检查记录主键
     * @return 项目自检-检查记录
     */
    public BizProjectCheckRecord selectBizProjectCheckRecordById(Long id);

    /**
     * 查询项目自检-检查记录列表
     *
     * @param bizProjectCheckRecord 项目自检-检查记录
     * @return 项目自检-检查记录集合
     */
    public List<BizProjectCheckRecord> selectBizProjectCheckRecordList(BizProjectCheckRecord bizProjectCheckRecord);

    /**
     * 新增项目自检-检查记录
     *
     * @param bizProjectCheckRecord 项目自检-检查记录
     * @return 结果
     */
    public int insertBizProjectCheckRecord(BizProjectCheckRecord bizProjectCheckRecord);

    /**
     * 修改项目自检-检查记录
     *
     * @param bizProjectCheckRecord 项目自检-检查记录
     * @return 结果
     */
    public int updateBizProjectCheckRecord(BizProjectCheckRecord bizProjectCheckRecord);

    /**
     * 删除项目自检-检查记录
     *
     * @param id 项目自检-检查记录主键
     * @return 结果
     */
    public int deleteBizProjectCheckRecordById(Long id);

    /**
     * 批量删除项目自检-检查记录
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteBizProjectCheckRecordByIds(Long[] ids);

    /**
     * 查询自己和通知人需要处理数据的列表根据不同状态
     * @param listRequestVo 通用请求参数
     * @return 结果(分页)
     */
    public Page<BizProjectCheckRecord> getRectify(ListRequestVo listRequestVo);

    /**
     * 查询自己需要复查数据的数量
     * @param listRequestVo 通用请求参数
     * @return 结果
     */
    int selectBizProjectCheckRecordCount(ListRequestVo listRequestVo);

    /**
     * 查询待复查
     *
     * @param listRequestVo 通用请求参数
     * @return 结果(分页)
     */
    List<BizProjectCheckRecord> getReview(ListRequestVo listRequestVo);

    List<BizProjectCheckRecord> selectUnRecordList(BizProjectCheckRecord projectCheckRecord);

    /**
     * 批量插入未施工区域
     * @param bizProjectCheckRecordList 检查记录集合
     * @return 结果
     */
    int insertBizProjectCheckRecordList(List<BizProjectCheckRecord> bizProjectCheckRecordList);

    /**
     * 根据任务id查询检查记录
     * @param projectId 项目id
     * @param taskIds 任务id集合
     * @param hiddenDangerStatusList 隐患状态集合
     * @return 结果
     */
    List<BizProjectCheckRecord> selectBizProjectCheckRecordByTaskIds(@Param("projectId") Long projectId,@Param("taskIds") List<Long> taskIds,@Param("hiddenDangerStatusList") List<String> hiddenDangerStatusList);

    /**
     * 根据任务id查询检查记录
     * @param listRequestVo 通用请求参数
     * @return 结果
     */
    public BizProjectCheckRecord selectBizProjectCheckRecordByIdAndProjectId(@Param("listRequestVo") ListRequestVo listRequestVo);

    /**
     * 整改待办数量
     */
    int getReformCount(ListRequestVo listRequestVo);

    /**
     * 检查人列表
     * @return
     */
    List<String> selectCheckPeopleList();

    List<BizProjectCheckRecord> selectAllRecordList(@Param("createTime") String createTime);

    /**
     * 安全查账台
     * @param searchDTO 根据不同条件查询
     * @return 结果集
     */
    List<BizProjectCheckRecordVO2> selectCheckLedger(BizProjectCheckRecordSearchDTO searchDTO);

    String selectListByUserId(Long userId);

    /**
     * 根据ids查询 所有的检查记录
     * @param recordIds
     * @return
     */
    List<BizProjectCheckRecord> selectBizProjectCheckRecordByIds(Set<Long> recordIds);

    /**
     * 根据项目自检id查询隐患总数
     * @param id
     * @return
     */
    public int selectCountByCheckId(Long id);

    /**
     * 根据项目自检id查询隐患数据
     * @param id
     * @return
     */
    List<BizProjectCheckRecord> selectListByProjectCheckId(Long id);

    /**
     * 根据项目自检id查询隐患数据
     * @param ids
     * @return
     */
    List<BizProjectCheckRecord> selectListByProjectCheckIds(@Param("ids") Long[] ids);

    List<BizProjectCheckRecord> selectRecordListForEntry(StatisticsDto statisticsDto);

    List<BizProjectCheckRecord> selectRecordListForProject(StatisticsDto statisticsDto);
    @MapKey("id")
    List<Map<String, Object>> selectOverdueProjects(StatisticsDto statisticsDto);
    @MapKey("id")
    List<Map<String, Object>> getSecurityCheckTrend(StatisticsDto statisticsDto);
    @MapKey("id")
    List<Map<String, Object>> getRiskTrend(StatisticsDto statisticsDto);

}
